package wodegua.d25_recursion;

/**
 * 目标:掌握递归的应用，执行流程和算法思想。
 *
 * 递归算法三要素:
 * 1.递归的公式:f(n)=f(n-1)*n;
 * 2.递归的终结点:f(1)
 * 3.递归的方向必须走向终结点:
 * f(5)= f(4)*5
 * f(4)= f(3)*4
 * f(3)= f(2)* 3
 * f(2)= f(1)*2
 * f(1)= 1
 */
public class RecursionTest2 {
    public static void main(String[] args) {
        //“5的阶乘是:
        System.out.println("5的阶乘是:" + f(5));

        //需求:计算1-n的和的结果，使用递归思想解决。
        //分析:我们先从数学思维上理解递归的流程和核心点
        //① 假如我们认为存在一个公式是f(n)=1+2+3+4+5+6+7+.(n-1)+n;
        //② 那么公式等价形式就是:f(n)=f(n-1)+n
        //③ 递归的终结点:f(1)=1
        //④ 递归的方向
        //⑤ f(g)= f(4) +5
        // f(4)= f(3) +4
        // f(3)= f(2)+ 3
        // f(2)= f(1)+ 2
        // f(1)= 1
        System.out.println("1-5的和是：" + fu(5));
    }

    private static int f(int n){
        if (n == 1) {
            return 1;
        } else {
            return f(n-1) * n;
        }
    }

    private static int fu(int n){
        if (n == 1) {
            return 1;
        } else {
            return fu(n-1) + n;
        }
    }
}
